Over the past years an increasing number of services ranging from simple web applications to advanced distributed analytics frameworks are deployed in large-scale datacenters operated by third-party cloud providers (e.g., Amazon Web Services®, Google Compute Engine®). Cloud providers leverage virtualization technologies such as hypervisors and containers to achieve high resource isolation and increased resource utilization. While increased resource utilization helps to reduce costs for the cloud provider, cloud customers are looking for predictable service performance via performance guarantees. One way to express service performance guarantees is to establish a Service Level Agreement (SLA) between the customer and cloud provider. SLA's can be broadly classified in two categories: coarse-grained and fine-grained.
A coarse-grained SLA can define a service performance guarantee in terms of an uptime percentage. For example, a cloud platform could implement an SLA policy by providing a monthly uptime percentage guarantee of at least 99.95%. Alternatively, SLAs can be expressed in a more fine-grained manner. For instance, performance can be defined on a per application basis, for example all servers running a particular application should have a minimum response time X or communication delay D. This could also be in terms of a deadline thus requiring the service to finish within a given time frame. Fine-grained SLAs are especially attractive for cloud customers as they provide strict performance guarantees.